<?php
/**
 * Prueft anhand eines Woerterbuchs, ob ein Wort darin vorkommt
 *
 * @author		Joachim Ruf
 * @copyright	Copyright (c) 2003-2010 Loresoft Software (http://www.loresoft.de)
 * @license		http://yapary.loresoft.de/lizenzbedingungen     New BSD License
 *
 * */


Class Yapary_Dictionary_DbDictionary
{
    private $oSql                   = NULL;
	private $countryCodeSearch      = NULL;
	private $countryCodeTranslation = NULL;
    private $dbTableName            = 'yapary_db_dictionary';


    /**
	* Prueft ob ein Wort in einem Woerterbuch vorkommt und gibt die Uebersetzung aus
	* @param class $oSql				: Sql-Klasse
	* @param string $_countryCodeLng1	: CountryCode der Sprache nach welcher eine Suche vorgenommen wird
	* @param string $_countryCodeLng2	: CountryCode der Sprache fuer welche fuer die Suche die Ubersetzung ausgegeben wird
	*/
	function __construct (Yapary_Db_Sql_Connector $_oSql, $_countryCodeSearch, $_countryCodeTranslate)
	{
		if (!$_oSql->database()->table($this->dbTableName)->exists()) {
            $e = new Exception();
            $arrTrace = $e->getTrace();
            $trace = '<b>'.$arrTrace[0]['class'].$arrTrace[0]['type'].$arrTrace[0]['function'].'</b> in <b>'.$arrTrace[0]['file'].'</b> on line <b>'.$arrTrace[0]['line'].'</b>';
            trigger_error('<pre></b>No database installed<br />'.$trace.'</pre>', E_USER_WARNING);
		}

		$this->oSql                   = $_oSql;
		$this->countryCodeSearch      = $_countryCodeSearch;
		$this->countryCodeTranslation = $_countryCodeTranslate;
	}


	/**
	 * Prueft ob der "Key" existiert
	 * @param string $_txtLngSearch			: Wort der zu suchenden Sprache
	 * @return bool
	 * */
	public function exists ($_txtLngSearch)
	{
	    $oDbResult = $this->oSql->request('SELECT Id
	    					  FROM db_dictionary
	    					  WHERE '.$this->countryCodeSearch.'=:txtLngSearch',
	                        array('txtLngSearch'      => $_txtLngSearch));

	    if ($oDbResult->getCount() == 1) {
	        return true;
	    }

	    return false;
	}


	/**
	 * Prueft ob das "Paar" existiert
	 * @param string $_txtLngSearch			: Wort der zu suchenden Sprache
	 * @param string $_txtLngTranslation	: Wort der zu uebersetzenden Sprache
	 * @return bool
	 * */
	public function pairExists ($_txtLngSearch, $_txtLngTranslation)
	{
	    $oDbResult = $this->oSql->request('SELECT Id
	    					  FROM db_dictionary
	    					  WHERE
	    					  	'.$this->countryCodeSearch.'=:txtLngSearch
	    					  	AND '.$this->countryCodeTranslation.'=:txtLngTranslation',
	                        array('txtLngSearch'      => $_txtLngSearch,
	                              'txtLngTranslation' => $_txtLngTranslation));

	    if ($oDbResult->getCount() >= 1) {
	        return true;
	    }

	    return false;
	}


	/**
	 * Fuegt ein neues Woerterpaar hinzu
	 * @param string $_txtLngSearch			: Wort der zu suchenden Sprache
	 * @param string $_txtLngTranslation	: Wort der zu uebersetzenden Sprache
	 * @return bool
	 * */
	public function add ($_txtLngSearch, $_txtLngTranslation)
	{
	    if ($this->pairExists($_txtLngSearch, $_txtLngTranslation) === true) {
	        return false;
	    }

	    $oDbResult = $this->oSql->request('INSERT INTO db_dictionary
    	    					     ('.$this->countryCodeSearch.', '.$this->countryCodeTranslation.')
    	    					     VALUES (:txtLngSearch, :txtLngTranslation)',
    	                            array('txtLngSearch'      => $_txtLngSearch,
    	                            	  'txtLngTranslation' => $_txtLngTranslation));
	    return true;
	}


	/**
	 * Aendert ein Vorhandenes Woerterpaar
	 * @param string $_txtLngSearch			: Wort der zu suchenden Sprache
	 * @param string $_newTxtLngSearch		: Neue Uebersetzung fuer das zu suchende Wort
	 * @param string $_newTxtLngTranslation	: Neue Uebersetzung fuer das zu Uebersetzende Wort
	 * @return bool
	 * */
	public function update ($_txtLngSearch, $_newTxtLngSearch, $_newTxtLngTranslation)
	{
	    if ($this->exists($_txtLngSearch) === false) {
	        return false;
	    }
	    if ($this->pairExists($_newTxtLngSearch, $_newTxtLngTranslation) === true) {
	        return false;
	    }

	    $oDbResult = $this->oSql->request('UPDATE db_dictionary
    	    					    SET
    	    					  	  '.$this->countryCodeSearch.'=:newTxtLngSearch,
    	    					  	  '.$this->countryCodeTranslation.'=:newTxtLngTranslation
    	    					    WHERE
    	    					  	  '.$this->countryCodeSearch.'=:txtLngSearch',
    	                          array('txtLngSearch'         => $_txtLngSearch,
    	                                'newTxtLngSearch'      => $_newTxtLngSearch,
    	                                'newTxtLngTranslation' => $_newTxtLngTranslation));
	    return true;
	}


	/**
	 * Loescht ein Vorhandenes Woerterpaar
	 * @param string $_txtLngSearch			: Wort der zu suchenden Sprache
	 * @return bool
	 * */
	public function delete ($_txtLngSearch)
	{
	    $oDbResult = $this->oSql->request('DELETE
    	    					     FROM db_dictionary
    	    					     WHERE '.$this->countryCodeSearch.'=:txtLngSearch',
    	                           array('txtLngSearch'      => $_txtLngSearch));

	    return true;
	}


	/**
	 * Liefert die Uebersetzung zur angegebenen Suche. Existiert keine Uebersetzung so wird NULL ausgegeben
	 * @param string $_txtLngSearch	: Text fuer welchen nach der Uebersetzung gesucht werden soll
	 * @return string|NULL
	 * */
	public function get ($_txtLngSearch)
	{
	    $search      = $this->countryCodeSearch;
	    $translation = $this->countryCodeTranslation;

	    $oDbResult = $this->oSql->request('SELECT '.$translation.'
	    					  FROM db_dictionary
	    					  WHERE '.$search.'=:txtLngSearch',
	                        array('txtLngSearch' => $_txtLngSearch));

	    if ($oDbResult->getCount() == 0) {
	        return NULL;
	    }

	    $row = $oDbResult->getNext();
	    return $row->$translation;
	}


	/**
	 * Liefert die Anzahl alle Eintraege
	 * @return int
	 * */
	public function getCount ()
	{
	    $oDbResult = $this->oSql->request('SELECT COUNT(*) AS Counter FROM db_dictionary');
	    $row = $oDbResult->getNext();
	    return (int) $row->Counter;
	}

}


?>